// 定义音乐数据对象，包含整首歌曲的配置信息
SONG = {
    // 每行的长度，可能用于控制音乐节奏的时间单位
"rowLen": 7350,
    // 结束模式的编号，标识歌曲结束时的节奏模式
"endPattern": 11,
    "songData": [
        {
            // 振荡器 1 的八度设置
"osc1_oct": 4,
            // 振荡器 1 的音高微调值
"osc1_det": 0,
            // 振荡器 1 的音高偏移值
"osc1_detune": 0,
            // 振荡器 1 的包络调制系数
"osc1_xenv": 0,
            // 振荡器 1 的音量设置
"osc1_vol": 192,
            // 振荡器 1 的波形类型，3 可能代表特定的波形
"osc1_waveform": 3,
            "osc2_oct": 4,
            "osc2_det": 0,
            "osc2_detune": 7,
            "osc2_xenv": 0,
            "osc2_vol": 201,
            "osc2_waveform": 3,
            "noise_fader": 0,
            // 音量包络的起音时间，控制音量从 0 到最大的时间
"env_attack": 789,
            // 音量包络的持续时间，控制音量保持最大的时间
"env_sustain": 1234,
            // 音量包络的释音时间，控制音量从最大到 0 的时间
"env_release": 13636,
            // 主音量控制
"env_master": 191,
            // 音效滤波器类型，2 可能代表特定的滤波效果
"fx_filter": 2,
            // 音效滤波器的频率设置
"fx_freq": 5839,
            // 音效滤波器的共振强度
"fx_resonance": 254,
            // 音效延迟效果的时间设置
"fx_delay_time": 6,
            // 音效延迟效果的强度
"fx_delay_amt": 121,
            // 音效声像的频率设置
"fx_pan_freq": 6,
            // 音效声像的强度
"fx_pan_amt": 147,
            // 低频振荡器对振荡器 1 的调制频率
"lfo_osc1_freq": 0,
            // 低频振荡器对音效滤波器的调制频率
"lfo_fx_freq": 1,
            // 低频振荡器的基础频率
"lfo_freq": 6,
            // 低频振荡器的调制强度
"lfo_amt": 195,
            // 低频振荡器的波形类型，0 可能代表特定的波形
"lfo_waveform": 0,
            // 节奏模式数组，定义了不同节奏模式的编号
"p": [
                2,
                3,
                2,
                2,
                2,
                3,
                2,
                3,
                4,
                5
            ],
            // 音符数据数组，包含多个音符序列对象
"c": [
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        161,
                        0,
                        0,
                        0,
                        161,
                        0,
                        0,
                        0,
                        164,
                        0,
                        0,
                        0,
                        163,
                        0,
                        0,
                        0,
                        161,
                        0,
                        0,
                        0,
                        168,
                        0,
                        0,
                        0,
                        166,
                        0,
                        0,
                        0,
                        164,
                        0,
                        0,
                        0
                    ]
                },
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        168,
                        0,
                        0,
                        0,
                        166,
                        0,
                        0,
                        0,
                        164,
                        0,
                        0,
                        0,
                        163,
                        0,
                        0,
                        0,
                        161,
                        0,
                        0,
                        0,
                        161,
                        0,
                        0,
                        0,
                        163,
                        0,
                        0,
                        0,
                        164,
                        0,
                        0,
                        0
                    ]
                },
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        164,
                        0,
                        0,
                        0,
                        163,
                        0,
                        0,
                        0,
                        161,
                        0,
                        0,
                        0,
                        161,
                        0,
                        0,
                        0,
                        166,
                        0,
                        0,
                        0,
                        164,
                        0,
                        0,
                        0,
                        163,
                        0,
                        0,
                        0,
                        163,
                        0,
                        0,
                        0
                    ]
                },
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        168,
                        0,
                        0,
                        0,
                        166,
                        0,
                        0,
                        0,
                        164,
                        0,
                        0,
                        0,
                        164,
                        0,
                        0,
                        0,
                        163,
                        0,
                        0,
                        0,
                        163,
                        0,
                        0,
                        0,
                        168,
                        0,
                        0,
                        0,
                        166,
                        0,
                        0,
                        0
                    ]
                }
            ]
        },
        {
            "osc1_oct": 7,
            // 振荡器 1 的音高微调值
"osc1_det": 0,
            // 振荡器 1 的音高偏移值
"osc1_detune": 0,
            "osc1_xenv": 1,
            "osc1_vol": 128,
            "osc1_waveform": 0,
            "osc2_oct": 7,
            "osc2_det": 0,
            "osc2_detune": 0,
            "osc2_xenv": 1,
            "osc2_vol": 128,
            "osc2_waveform": 0,
            "noise_fader": 255,
            "env_attack": 100,
            "env_sustain": 0,
            "env_release": 3636,
            "env_master": 59,
            // 音效滤波器类型，2 可能代表特定的滤波效果
"fx_filter": 2,
            "fx_freq": 500,
            // 音效滤波器的共振强度
"fx_resonance": 254,
            "fx_delay_time": 0,
            "fx_delay_amt": 27,
            "fx_pan_freq": 0,
            "fx_pan_amt": 0,
            // 低频振荡器对振荡器 1 的调制频率
"lfo_osc1_freq": 0,
            "lfo_fx_freq": 0,
            "lfo_freq": 0,
            "lfo_amt": 0,
            // 低频振荡器的波形类型，0 可能代表特定的波形
"lfo_waveform": 0,
            // 节奏模式数组，定义了不同节奏模式的编号
"p": [
                2,
                2,
                2,
                2,
                2,
                2,
                2,
                2,
                2,
                2
            ],
            // 音符数据数组，包含多个音符序列对象
"c": [
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        137,
                        0,
                        0,
                        0,
                        137,
                        0,
                        0,
                        0,
                        135,
                        0,
                        0,
                        0,
                        135,
                        0,
                        0,
                        0,
                        134,
                        0,
                        0,
                        0,
                        132,
                        0,
                        0,
                        0,
                        132,
                        0,
                        0,
                        0,
                        132,
                        0,
                        0,
                        0
                    ]
                }
            ]
        },
        {
            "osc1_oct": 8,
            // 振荡器 1 的音高微调值
"osc1_det": 0,
            // 振荡器 1 的音高偏移值
"osc1_detune": 0,
            // 振荡器 1 的包络调制系数
"osc1_xenv": 0,
            "osc1_vol": 0,
            "osc1_waveform": 0,
            "osc2_oct": 8,
            "osc2_det": 0,
            "osc2_detune": 0,
            "osc2_xenv": 0,
            "osc2_vol": 0,
            "osc2_waveform": 0,
            "noise_fader": 60,
            "env_attack": 50,
            "env_sustain": 419,
            "env_release": 4607,
            "env_master": 130,
            "fx_filter": 1,
            "fx_freq": 10332,
            "fx_resonance": 120,
            "fx_delay_time": 4,
            "fx_delay_amt": 16,
            "fx_pan_freq": 5,
            "fx_pan_amt": 108,
            // 低频振荡器对振荡器 1 的调制频率
"lfo_osc1_freq": 0,
            "lfo_fx_freq": 0,
            "lfo_freq": 5,
            "lfo_amt": 187,
            // 低频振荡器的波形类型，0 可能代表特定的波形
"lfo_waveform": 0,
            // 节奏模式数组，定义了不同节奏模式的编号
"p": [
                0,
                0,
                2,
                2,
                0,
                0,
                2,
                2,
                2,
                2
            ],
            // 音符数据数组，包含多个音符序列对象
"c": [
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0,
                        0
                    ]
                },
                {
                    // 音符编号数组，定义了每个位置的音符编号
"n": [
                        111,
                        0,
                        0,
                        0,
                        120,
                        0,
                        0,
                        0,
                        111,
                        0,
                        0,
                        0,
                        120,
                        0,
                        0,
                        0,
                        111,
                        0,
                        0,
                        0,
                        120,
                        0,
                        0,
                        0,
                        111,
                        0,
                        0,
                        0,
                        120,
                        0,
                        0,
                        0
                    ]
                }
            ]
        }
    ],
    "songLen": 50
}

playSong = () => new MusicGenerator(SONG).createAudioBuffer(buffer => {
    const source = audioCtx.createBufferSource();
    source.buffer = buffer;
    source.loop = true;

    const gainNode = audioCtx.createGain();
    gainNode.gain.value = SONG_VOLUME;
    gainNode.connect(audioCtx.destination);
    source.connect(gainNode);
    source.nomangle(start)();

    playSong = () => 0;
    setSongVolume = (x) => {
        SONG_VOLUME = x;
        gainNode.gain.value = x;
    }
});

SONG_VOLUME = 0.5;
setSongVolume = (x) => SONG_VOLUME = x;
